home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / MSD-DU12.ARC / MSD - $%c68%c4%c4 < prev    next >
Encoding:
Text File  |  2019-04-13  |  5.4 KB  |  85 lines

  1. ║CM:MSD - $╞8──
  2. ║LM21:RM70:PP66:PG60
  3. ║P#134
  4. ║FT1:,,╨AGE <>
  5. ║AI-16
  6. $╞8──           ╙ET .╪ TO $05.  ┴ ╙┘╬├ MARK IS 5 BYTES OF $╞╞.
  7. $╞8─╞  ╫╥╘╙10   ╫AIT FOR BYTE WRITTEN SIGNAL.
  8. $╞8┼2           ╫AIT FOR APPROXIMATELY 14 MICROSECONDS FOR BYTE TO GO LOW.
  9. $╞8┼6           ─ECREMENT .╪ AND LOOP BACK TO ╫╥╘╙10 IF .╪ > 0.
  10. $╞8┼9           ╠OAD .╪ WITH $0┴ TO OUTPUT THE BLOCK HEADER WHICH IS 10 ╟├╥ BYTES LONG.
  11. $╞8┼┬           ╠OAD .┘ FROM ╩╧┬╘╥╦ [$4┼┴5], THE INDEX OF THE CURRENT HEADER.
  12. $╞8┼┼  ╫╥╘╙20   ╫AIT FOR LAST BYTE WRITTEN SIGNAL.
  13. $╞8╞1           ╧BTAIN HEADER BYTE FROM ┬╒╞0,┘ [$4000,┘] AND SET IT UP IN THE OUTPUT ╨ORT ┬ [$01].
  14. $╞8╞6           ╔NCREMENT .┘ TO NEXT HEADER BYTE, DECREMENT .╪ AND LOOP BACK TO ╫╥╘╙20 IF .╪ > 0.
  15. $╞8╞┴           ╙ET .╪ TO $08 TO OUTPUT 8 GAP BYTES.
  16. $╞8╞├  ╫╥╘╙30   ╫AIT FOR LAST BYTE WRITTEN SIGNAL.
  17. $╞8╞╞           ╫ASTE 4 MICROSECONDS.
  18. $╞901           ╙ET ╨ORT ┬ [$01] TO $55 (A GAP BYTE).
  19. $╞905           ─ECREMENT .╪ AND LOOP BACK TO ╫╥╘╙30 IF .╪ > 0.
  20.        ╬OTE:    $╞8╞├...$╞907 TAKE APPROXIMATELY 14 MICROSECONDS BY WHICH TIME, THE BYTE WRITTEN SIGNAL SHOULD ONCE AGAIN BE LOW.
  21. $╞908           ╙ET .┴ TO $╞╞.
  22. $╞90┴           ╙ET .╪ TO $05.  ┴ ╙┘╬├ MARK IS 5 BYTES OF $╞╞.
  23. $╞90├  ─┬╙┘╬├   ╫AIT FOR BYTE WRITTEN SIGNAL.
  24. $╞90╞           ╫ASTE APPROXIMATELY 6 MICROSECONDS.
  25. $╞912           ╙AVE .┴ ($╞╞) IN ╨ORT ┬ [$01].
  26. $╞914           ─ECREMENT .╪ AND LOOP BACK TO ─┬╙┘╬├ IF .╪ > 0.
  27. $╞917           ╙ET .╪ TO $┬┬, THE START OFFSET OF THE DATA BLOCK IN THE OVERFLOW BUFFER.
  28. $╞919  ╫╥╘╙40   ╫AIT FOR LAST BYTE WRITTEN SIGNAL.
  29. $╞91├           ╫ASTE APPROXIMATELY 4 MICROSECONDS.
  30. $╞91┼           ╙ET ╨ORT ┬ [$01] TO ╧╓╥┬╒╞,╪ [$4╞00,╪].
  31. $╞923           ╔NCREMENT .╪ TO NEXT BYTE AND LOOP BACK TO ╫╥╘╙40 IF .╪ IS NOT ZERO.  ╘HIS LOOP OUTPUTS 69 ╟├╥ BYTES.
  32. $╞926           ╙ET .┘ TO ZERO.
  33. $╞928           ╫AIT FOR LAST BYTE WRITTEN SIGNAL.
  34. $╞92┬           ╫ASTE APPROXIMATELY 2 MICROSECONDS.
  35. $╞92├           ╙ET ╨ORT ┬ [$01] TO (┬╒╞╨╬╘],┘ [($42),┘].
  36. $╞930           ╔NCREMENT .┘ AND LOOP BACK TO ╫╥╘╙50 IF .┘ IS NOT ZERO.  ╘HIS LOOP OUTPUTS 256 ╟├╥ BYTES.
  37. $╞933           ╙ET .┴ TO $55 (A GAP BYTE).
  38. $╞935           ╠OAD .╪ FROM ╘┴╔╠╟╨ [$4┼┬2], THE TAIL GAP COUNTER FOR THIS TRACK.
  39. $╞938  ╫╟╨2     ╫AIT FOR LAST BYTE WRITTEN SIGNAL.
  40. $╞93┬           ╫ASTE APPROXIMATELY 6 MICROSECONDS.
  41. $╞93┼           ╙AVE .┴ ($55) IN ╨ORT ┬ [$01].
  42. $╞940           ─ECREMENT .╪ AND LOOP BACK TO ╫╟╨2 IF .╪ > 0.
  43. $╞943           ┴DD $0┴ TO ╩╧┬╘╥╦ [$4┼┴5] TO ADVANCE TO THE NEXT BLOCK HEADER.
  44. $╞94├           ─ECREMENT ╙┼├╘ [$4┼┬6] AND LOOP BACK TO         ╫╥╘╙┘╬ [$╞8─9] IF THERE ARE MORE BLOCKS TO BE WRITTEN ON THIS TRACK.
  45. $╞951           ╫AIT FOR LAST BYTE WRITTEN SIGNAL (THE LAST BYTE ON THIS TRACK).
  46. $╞954           ╙WITCH BACK TO READING IN PREPARATION FOR VERIFICATION.
  47. $╞958           ╙ET ╨ORT ┬ [$01] TO $╞╞.
  48. $╞95├           ╙ET ╨ORT ┬ IN LATCH MODE.
  49. ║FP0
  50. $╞95┼           ╙ET ╘╥┘╙ [$4┼┬5] TO $├8 TO LIMIT VERIFY ATTEMPTS TO 200.
  51. $╞963  ├╧═╨     ╙ET ┬╒╞╨╬╘ [$42/$43] TO $00/$40 ($4000) TO POINT TO THE START OF THE SECTOR HEADERS.
  52. $╞96┬           ├OPY THE NUMBER OF SECTORS ON THIS TRACK,      ╙┼├╘╥ [$4┼┴┴], TO ╙┼├╘ [$4┼┬6].
  53. $╞971  ├═╨╥10   ╩╙╥ ╙┘╬├ [$╞4┴6] TO WAIT FOR ANY ╙┘╬├ MARK AND IF NONE WERE FOUND THEN BRANCH TO ├═╨╥25.
  54. $╞976           ╫AIT FOR END OF ╙┘╬├ MARK.
  55. $╞979           ╫AIT UNTIL WE HAVE STARTED READING THE NEXT BYTE.
  56. $╞97├           ╙ET .╪ TO $0┴ (THE LENGTH OF THE BLOCK HEADER) AND CLEAR .┘.
  57. $╞980           ╫AIT FOR BYTE READY.
  58. $╞983           ╔F ╨ORT ┬ [$01] DOES NOT MATCH THE BLOCK HEADER CHARACTER AT (┬╒╞╨╬╘),┘ [($42),┘] THEN BRANCH TO ├═╨╥20.
  59. $╞989           ╔NCREMENT .┘ AND DECREMENT .╪.  ╔F .╪ IS > 0 THERE ARE MORE BYTES IN THE HEADER SO LOOP BACK TO ├═╨╥15 TO CHECK THEM.
  60. $╞98─           ╔NCREMENT ┬╒╞╨╬╘ [$42] SO IT POINTS TO THE NEXT HEADER IMAGE.
  61. $╞994           ╩UMP TO ╘╙╘─┴╘ [$╞9┴1] TO VERIFY THE DATA PORTION.
  62. $╞997  ├═╨╥20   ─ECREMENT ╘╥┘╙ [$4┼┬5] AND BRANCH BACK TO ├╧═╨ IF THERE ARE MORE ATTEMPTS LEFT.
  63. $╞99├           ╠OAD .┴ WITH $06 (╞╧╥═┴╘ ╓┼╥╔╞┘ ┼╥╥╧╥).
  64. $╞99┼  ├═╨╥25   ╩UMP TO ╞═╘┼╥╥ [$╞9┼├].
  65. $╞9┴1  ╘╙╘─┴╘   ╩╙╥ ╙┘╬├ [$╞4┴6] TO WAIT FOR THE NEXT ╙┘╬├ MARK AND BRANCH TO ├═╨╥25 IF NONE WERE FOUND.
  66. $╞9┴6           ╫AIT FOR END OF ╙┘╬├ MARK.
  67. $╞9┴9           ╫AIT UNTIL WE HAVE STARTED READING THE NEXT BYTE.
  68. $╞9┴├           ╠OAD .┘ WITH $┬┬ (THE START OF THE DATA IN THE OVERFLOW BUFFER).
  69. $╞9┴┼  ╘╙╘05    ╫AIT FOR BYTE READY.
  70. $╞9┬1           ╔F ╨ORT ┬ [$01] DOES NOT MATCH ╧╓╥┬╒╞,┘ [$4╞00,┘] BRANCH TO ├═╨╥20 TO TRY AGAIN.
  71. $╞9┬8           ╔NCREMENT .┘ AND LOOP BACK TO ╘╙╘05 IF THERE ARE MORE BYTES IN THE BUFFER.  ╘HIS LOOP CHECKS 69 BYTES.
  72. $╞9┬┬           ╠OAD .╪ WITH $╞├ TO CHECK THE LAST 252 BYTES (IGNORE THE CHECKSUM AND OFF BYTES).
  73. $╞9┬─  ╘╙╘10    ╫AIT FOR BYTE READY.
  74. $╞9├0           ╔F ╨ORT ┬ [$01] DOES NOT MATCH ┬╒╞2,┘ [$4200,┘] BRANCH TO ├═╨╥20 TO TRY AGAIN.
  75. $╞9├7           ╔NCREMENT .┘, DECREMENT .╪, AND LOOP BACK TO ╘╙╘10 IF THERE ARE MORE BYTES TO CHECK.
  76. $╞9├┬           ─ECREMENT ╙┼├╘ [$4┼┬6] AND LOOP BACK TO ├═╨╥10 IF THERE ARE MORE SECTORS ON THIS TRACK.
  77. $╞9─0           ╠OAD .┘ WITH ─╥╔╓┼ [$┬0].
  78. $╞9─2           ╠OAD .╪ WITH ─╥╓╘╥╦,╪ [$4┼88,╪], THE CURRENT TRACK.
  79. $╞9─5           ╔NCREMENT .╪ TO THE NEXT TRACK AND IF .╪ HAS REACHED ═┴╪╘╥╦ [$4├╞6] THEN BRANCH TO ╞═╘┼╬─.
  80. $╞9─┬           ╘RANSFER .╪ TO .┴ AND ╩╙╥ ═╧╓╚┼─ [$╞693] TO STEP TO THE NEXT TRACK.
  81. $╞9─╞           ╩╙╥ ╥┼┴─╧╬ [$╞┼1┴] TO SET ╨ORT ┬ IN ╥┼┴─ MODE.
  82. $╞9┼2           ╩UMP TO ╘╧╨╨ [$╞84├] TO FORMAT THE TRACK.
  83. $╞9┼5  ╞═╘┼╬─   ╙ET ╟├╥╞╠╟ [$4┼┬1] TO ZERO.
  84. $╞9┼┴           ┼NABLE INTERRUPTS AND RETURN.
  85.